﻿/**
	@file	FuncClass.cpp
	@date	2013/1/12
	@author	김진식(jeensig@gmail.com)
	@brief	함수들의 구현부
*/

#include "FuncClass.h"
#include <Windows.h>
#include <iostream>
#include <conio.h>

/**
	@brief		원하는 위치로 커서 이동
	@remarks	원하는 위치로 커서를 움직인다.
*/
void FuncClass::MoveToCursor(Position pos ///< 움직일 위치
	)
{
	COORD position_ = { pos.x_, pos.y_ };
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position_);
}

/**
	@return		그 위치의 있는 문자값
	@brief		그 위치에있는 문자를 받아온다.
	@remarks	그 위치에 있는 문자를 받아와서 리턴한다.
*/
int FuncClass::GetPositionChar(Position pos ///< 원하는 위치
	)
{
	COORD cursor;
	cursor.X = pos.x_;
	cursor.Y = pos.y_;
	TCHAR char_;
	DWORD read_char_;

	ReadConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE),
				&char_, 1, cursor, &read_char_);

	return char_;
}

/**
	@brief		원하는 위치에 문자열을 출력한다.
	@remarks	원하는 위치로 이동하여 문자열을 출력한다.
*/
void FuncClass::DrawTextObject(const char* text ///< 출력할 문자열
								,Position pos ///< 원하는 위치
								)
{
	MoveToCursor(pos);
	std::cout << text;
}

/**
	@brief		원하는 위치에 문자를 출력한다.
	@remarks	원하는 위치로 이동하여 문자를 출력한다.
*/
void FuncClass::DrawTextObject(const char text, ///< 출력할 문자
								Position pos ///< 원하는 위치
								)
{
	MoveToCursor(pos);
	std::cout << text;
}

/**
	@brief		아무키나 누를 때까지 대기
	@remarks	어떠한 키를 누를 때 까지 대기한다.
*/
void FuncClass::WaitAnyKey()
{
	int ch;
	ch= getch();
	if (ch==0xE0 || ch==0) {
		getch();
	}
}

/**
	@brief		커서의 타입을 바꾼다.
	@remarks	4가지의 커서 타입을 바꾼다.
*/
void FuncClass::SetCursorType( const CURSOR_TYPE &c )
{
	CONSOLE_CURSOR_INFO CurInfo;

	switch (c) {
	case CURSOR_NO:
		CurInfo.dwSize=1;
		CurInfo.bVisible=FALSE;
		break;
	case CURSOR_SOLID:
		CurInfo.dwSize=100;
		CurInfo.bVisible=TRUE;
		break;
	case CURSOR_NORMAL:
		CurInfo.dwSize=20;
		CurInfo.bVisible=TRUE;
		break;
	default:
		CurInfo.dwSize=1;
		CurInfo.bVisible=FALSE;
	}
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &CurInfo);
}